From: Carlos Garnacho Date: Tue, 18 Sep 2018 10:54:29 +0000 (+0200) Subject: keyboard: Listen to IbusPanelService::focus-in/out to track focus changes X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~929^2^2~26 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=11fb91f60f17f6013e40992563936ac0a98262cb;p=gnome-shell.git keyboard: Listen to IbusPanelService::focus-in/out to track focus changes In X11 there's no input panel state requests, so restore the previous behavior that focused entries would always toggle the OSK on there. --- diff --git a/js/misc/ibusManager.js b/js/misc/ibusManager.js index 6452e492f..34f198c35 100644 --- a/js/misc/ibusManager.js +++ b/js/misc/ibusManager.js @@ -119,6 +119,11 @@ var IBusManager = new Lang.Class({ let cursorLocation = { x, y, width: w, height: h }; this.emit('set-cursor-location', cursorLocation); }); + this._panelService.connect('focus-in', (panel, path) => { + if (!GLib.str_has_suffix(path, '/InputContext_1')) + this.emit ('focus-in'); + }); + this._panelService.connect('focus-out', () => { this.emit('focus-out'); }); try { // IBus versions older than 1.5.10 have a bug which diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index be0146344..491495c57 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -519,6 +519,12 @@ var FocusTracker = new Lang.Class({ this._setCurrentRect(rect); }); + this._ibusManager.connect('focus-in', () => { + this.emit('focus-changed', true); + }); + this._ibusManager.connect('focus-out', () => { + this.emit('focus-changed', false); + }); }, get currentWindow() { @@ -590,6 +596,16 @@ var Keyboard = new Lang.Class({ this._animFocusedWindow = null; this._oskFocusWindow = null; }); + this._focusTracker.connect('focus-changed', (tracker, focused) => { + // Valid only for X11 + if (Meta.is_wayland_compositor()) + return; + + if (focused) + this.show(Main.layoutManager.focusIndex); + else + this.hide(); + }); Meta.get_backend().connect('last-device-changed', (backend, deviceId) => {